/*
*编写一个函数其唯一的形参和返回值都是istream&类型，该函数应该一直读取流直到达到文件结束为止
*还应该将读到的内容输出到标准输出中
*最后重设流使其有效，并返回该流
*/
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;

istream& controlStream(istream& ism)
{
	int ival;
	while(ism >> ival,!ism.eof())
	{
		//检查文件是否破损，如果破损则抛出异常
		if(ism.bad())
		{
			throw runtime_error("文件破损，程序终止");
		}

		//检查输入是否合法，如果输入非法，则输出警告，并充值该流使之有效，并进入下一次循环
		if(ism.fail())
		{
			cerr << "输入非法，请重试！" << endl;
			ism.clear(istream::badbit);
			continue;
		}

		//如果未遇到任何异常或错误，则执行输出操作
		cout << ival;
	}
	//重置流状态
	ism.clear();
	return ism;
}


int main()
{
	int ival;
	controlStream(cin);
	cin >> ival;
	cout << ival << "  ";

	system("pause");
	return 0;
}